/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package resources.reports;
import general.util.MyDateUtil;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import jpa.entity.Produto_Pedido;
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JREmptyDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExporter;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.export.JRPdfExporter;
import net.sf.jasperreports.engine.export.JRPdfExporterParameter;
/**
 *
 * @author isaias
 */
public class ReportManager {

    public static void generatePedido(PedidoParams pedidoParams) throws IOException{

        pedidoParams.setFilePath(FileManager.createPedidoPath(pedidoParams.getFormat().getExtension()));
        createPedido(pedidoParams);
    }

    private static List<PedidoInsumosParams> generatePedidoRows(PedidoParams pedidoParams, HashMap hm) {
          List<PedidoInsumosParams> pedidoInsumosParams = new ArrayList<PedidoInsumosParams>();
          String unidadeMedida = "";
          String marca ="";
          String detalhe="";
           for(Produto_Pedido p : pedidoParams.getProduto_Pedido()){
               unidadeMedida = "";
               marca="";
               detalhe="";
                   PedidoInsumosParams pedidoInsumo = new PedidoInsumosParams();
                    pedidoInsumo.setInsumo(p.getProduto().getName());
                    pedidoInsumo.setValorU(""+p.getValor());
                    pedidoInsumo.setDataEnt(MyDateUtil.getReducedDateString(p.getDataEntrega()));
                    pedidoInsumo.setQuant(""+p.getQuantidade());
                    pedidoInsumo.setValorT(""+p.getValorTotal());

                      if(p.getProduto().getMarca() == null){
                          marca ="";
                      }else{
                          marca = p.getProduto().getMarca().getName();
                      }

                      if(p.getProduto().getDetalhe() == null){
                          detalhe ="";
                      }else{
                        detalhe = p.getProduto().getDetalhe().getName();
                      }

                      if(p.getProduto().getUnidadeMed() != null){
                          unidadeMedida = p.getProduto().getUnidadeMed().getName();
                      }
                    pedidoInsumo.setUnid(unidadeMedida);
                    pedidoInsumo.setMarca(marca);
                    pedidoInsumo.setDetalhe(detalhe);
                    
                    pedidoInsumosParams.add(pedidoInsumo);
           }


         hm.put("nameEmpresa", pedidoParams.getNameEmpresa());
         hm.put("enderecoEmpresa", pedidoParams.getEnderecoEmpresa());
         hm.put("cnpjEmpresa", pedidoParams.getCnpjEmpresa());
         hm.put("telefoneEmpresa", pedidoParams.getTelefoneEmpresa());
         hm.put("ieEmpresa", pedidoParams.getIeEmpresa());
         hm.put("email", pedidoParams.getEmail());
         hm.put("nameFornecedor", pedidoParams.getNameFornecedor());
         hm.put("telefoneFornecedor", pedidoParams.getTelefoneFornecedor());
         hm.put("vendedor", pedidoParams.getVendedor());
         hm.put("telefoneVendedor", pedidoParams.getTelefoneVendedor());
         hm.put("nomeObra", pedidoParams.getNomeObra());
         hm.put("localEntrega", pedidoParams.getLocalEntrega());
         hm.put("numeroPedido", pedidoParams.getNumeroPedido());
         hm.put("tipoPagamento", pedidoParams.getTipoPagamento());
         hm.put("diasPagamento", pedidoParams.getDiasPagamento());
         hm.put("valor", pedidoParams.getValor());
         hm.put("valorFrete", pedidoParams.getValorFrete());
         hm.put("valorTotal", pedidoParams.getValorTotal());
         hm.put("obs", pedidoParams.getObs());
         hm.put("pedidoData", pedidoParams.getPedidoData());
      

        return pedidoInsumosParams;
    }


    private static String createPedido(PedidoParams pedidoParams){
         HashMap hm = new HashMap();

         JRExporter exporter = ReportFormats.getCorrectJRExporter(pedidoParams.getFormat());
       //  JRDataSource jRDataSource = new JREmptyDataSource();
         JRDataSource jRDataSource = new JRBeanCollectionDataSource(generatePedidoRows(pedidoParams, hm));

        return genereateReport("pedido", pedidoParams.getFilePath(), jRDataSource, exporter, hm);
    }


    private static String genereateReport(String reportName, String saida, JRDataSource jRDataSource, JRExporter jRExporter, HashMap hm) {
        try {

            InputStream is = ReportManager.class.getResourceAsStream("/resources/reportsJasper/" + reportName + ".jasper");
            System.err.println("ReportName " + reportName);

            JasperPrint print = JasperFillManager.fillReport(is, hm, jRDataSource);

            jRExporter.setParameter(JRExporterParameter.JASPER_PRINT, print);
            jRExporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, saida);
            // Export the PDF file
            jRExporter.exportReport();
            return saida;
        } catch (JRException ex) {
            ex.printStackTrace();
        }

        return null;
    }

}
